﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Interface;
using FTools.Persistencia;
using System.Data.SqlClient;
using FTools.Dominio;
using System.Collections;
using FTools.Generico;


namespace FTools.Comunicacion
{
    class ComPersonaProveedor : InterfacePersonaProveedor
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerPersonaProveedor objPerPersonaProveedor = new PerPersonaProveedor();

        //OBTENER PERSONA PROVEEDOR
        public PersonaProveedor obtenerPersonaProveedor(long xIdPersona)
        {
            try
            {
                PerPersona objPerPersona = new PerPersona();
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                PersonaProveedor objPersonaProveedor = objPerPersonaProveedor.obtenerPersonaProveedor(conexion, transaccion, xIdPersona);
                if (objPerPersona.existePersona(conexion, transaccion, objPersonaProveedor.IdPersona))
                {
                    Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaProveedor.IdPersona);
                    objPersonaProveedor.Direccion = objPersona.Direccion;
                    objPersonaProveedor.Puerta = objPersona.Puerta;
                    objPersonaProveedor.Complemento = objPersona.Complemento;
                    objPersonaProveedor.Cp = objPersona.Cp;
                    objPersonaProveedor.Telefono = objPersona.Telefono;
                    objPersonaProveedor.Celular = objPersona.Celular;
                    objPersonaProveedor.Email = objPersona.Email;
                    objPersonaProveedor.Tipo = objPersona.Tipo;
                    objPersonaProveedor.ObjCiudad = objPersona.ObjCiudad;
                }
                transaccion.Commit();
                return objPersonaProveedor;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //EXISTE PERSONA PROVEEDOR
        public Boolean existePersonaProveedor(long xIdPersona)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerPersonaProveedor.existePersonaProveedor(conexion, transaccion, xIdPersona);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //OBTENER COLECCION PERSONA PROVEEDOR
        public ArrayList obtenerColeccionPersonaProveedor()
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersonaProveedor = objPerPersonaProveedor.obtenerColeccionPersonaProveedor(conexion, transaccion);
                PerPersona objPerPersona = new PerPersona();
                foreach (PersonaProveedor objPersonaProveedor in colPersonaProveedor)
                {
                    if (objPerPersona.existePersona(conexion, transaccion, objPersonaProveedor.IdPersona))
                    {
                        Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaProveedor.IdPersona);
                        objPersonaProveedor.Direccion = objPersona.Direccion;
                        objPersonaProveedor.Puerta = objPersona.Puerta;
                        objPersonaProveedor.Complemento = objPersona.Complemento;
                        objPersonaProveedor.Cp = objPersona.Cp;
                        objPersonaProveedor.Telefono = objPersona.Telefono;
                        objPersonaProveedor.Celular = objPersona.Celular;
                        objPersonaProveedor.Email = objPersona.Email;
                        objPersonaProveedor.Tipo = objPersona.Tipo;
                        objPersonaProveedor.ObjCiudad = objPersona.ObjCiudad;
                    }
                }
                transaccion.Commit();
                return colPersonaProveedor;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //OBTENER BUSQUEDA PERSONA PROVEEDOR
        public ArrayList obtenerBusquedaPersonaProveedor(String xNombre, long xIdRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colPersonaProveedor = objPerPersonaProveedor.obtenerBusquedaPersonaProveedor(conexion, transaccion, xNombre, xIdRubro);
                PerPersona objPerPersona = new PerPersona();
                foreach (PersonaProveedor objPersonaProveedor in colPersonaProveedor)
                {
                    if (objPerPersona.existePersona(conexion, transaccion, objPersonaProveedor.IdPersona))
                    {
                        Persona objPersona = objPerPersona.obtenerPersona(conexion, transaccion, objPersonaProveedor.IdPersona);
                        objPersonaProveedor.Direccion = objPersona.Direccion;
                        objPersonaProveedor.Puerta = objPersona.Puerta;
                        objPersonaProveedor.Complemento = objPersona.Complemento;
                        objPersonaProveedor.Cp = objPersona.Cp;
                        objPersonaProveedor.Telefono = objPersona.Telefono;
                        objPersonaProveedor.Celular = objPersona.Celular;
                        objPersonaProveedor.Email = objPersona.Email;
                        objPersonaProveedor.Tipo = objPersona.Tipo;
                        objPersonaProveedor.ObjCiudad = objPersona.ObjCiudad;
                    }
                }
                transaccion.Commit();
                return colPersonaProveedor;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //ALTA PERSONA PROVEEDOR
        public int altaPersonaProveedor(PersonaProveedor xObjPersonaProveedor)
        {
            SqlTransaction transaccion = null;
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                long idPersona = FuncionesGenericas.generarNumerador("PERSONA");
                xObjPersonaProveedor.IdPersona = idPersona;
                //DATOS PERSONA
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                objPersona.IdPersona = xObjPersonaProveedor.IdPersona;
                objPersona.Nombre = xObjPersonaProveedor.NombreProv;
                objPersona.Direccion = xObjPersonaProveedor.Direccion;
                objPersona.Puerta = xObjPersonaProveedor.Puerta;
                objPersona.Complemento = xObjPersonaProveedor.Complemento;
                objPersona.Cp = xObjPersonaProveedor.Cp;
                objPersona.Telefono = xObjPersonaProveedor.Telefono;
                objPersona.Celular = xObjPersonaProveedor.Celular;
                objPersona.Email = xObjPersonaProveedor.Email;
                objPersona.Tipo = xObjPersonaProveedor.Tipo;
                objPersona.ObjCiudad = xObjPersonaProveedor.ObjCiudad;
                objPerPersona.altaPersona(conexion, transaccion, objPersona);//ALTA PERSONA
                //
                int res = objPerPersonaProveedor.altaPersonaProveedor(conexion, transaccion, xObjPersonaProveedor);
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //BAJA PERSONA PROVEEDOR
        public int bajaPersonaProveedor(PersonaProveedor xObjPersonaProveedor)
        {
            SqlTransaction transaccion = null;
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                int res = objPerPersonaProveedor.bajaPersonaProveedor(conexion, transaccion, xObjPersonaProveedor);
                if (objPerPersona.existePersona(conexion, transaccion, xObjPersonaProveedor.IdPersona))
                {
                    objPersona = objPerPersona.obtenerPersona(conexion, transaccion, xObjPersonaProveedor.IdPersona);
                    objPerPersona.bajaPersona(conexion, transaccion, objPersona);//BAJA PERSONA
                }
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        //MODIFICA PERSONA PROVEEDOR
        public int modificaPersonaProveedor(PersonaProveedor xObjPersonaProveedor)
        {

            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Persona objPersona = new Persona();
                PerPersona objPerPersona = new PerPersona();
                if (objPerPersona.existePersona(conexion, transaccion, xObjPersonaProveedor.IdPersona))
                {
                    objPersona.IdPersona = xObjPersonaProveedor.IdPersona;
                    objPersona.Nombre = xObjPersonaProveedor.NombreProv;
                    objPersona.Direccion = xObjPersonaProveedor.Direccion;
                    objPersona.Puerta = xObjPersonaProveedor.Puerta;
                    objPersona.Complemento = xObjPersonaProveedor.Complemento;
                    objPersona.Cp = xObjPersonaProveedor.Cp;
                    objPersona.Telefono = xObjPersonaProveedor.Telefono;
                    objPersona.Celular = xObjPersonaProveedor.Celular;
                    objPersona.Email = xObjPersonaProveedor.Email;
                    objPersona.Tipo = xObjPersonaProveedor.Tipo;
                    objPersona.ObjCiudad = xObjPersonaProveedor.ObjCiudad;
                    objPerPersona.modificaPersona(conexion, transaccion, objPersona);//MODIFICA PERSONA
                }
                int res = objPerPersonaProveedor.modificaPersonaProveedor(conexion, transaccion, xObjPersonaProveedor);
                transaccion.Commit();
                return res;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
